package com.united.ucts.modules.system.service;

import com.united.frame.common.module.result.Result;
import com.united.frame.common.module.service.IBaseService;
import com.united.frame.plugin.security.CurrUser;
import com.united.frame.plugin.security.Oauth2Token;
import com.united.ucts.modules.system.pojo.dto.AdminDto;
import com.united.ucts.modules.system.pojo.dto.AdminParamDto;
import com.united.ucts.modules.system.pojo.dto.AdminPasswordUpdateParamDto;
import com.united.ucts.modules.system.pojo.po.Admin;
import com.united.ucts.modules.system.pojo.po.Resource;
import com.united.ucts.modules.system.pojo.po.Role;

import java.util.List;

/**
 * 后台管理员Service
 */
public interface AdminService extends IBaseService<Admin> {


    /**
     * 根据前端的管理员新增/注册信息,对用户注册信息进行注册处理
     *
     * @param adminParam 用户注册/新增请求参数
     * @return 注册成功后结果
     */
    Admin register(AdminParamDto adminParam);

    /**
     * 删除指定用户
     *
     * @param id 需要删除的管理员用户ID
     * @return 删除结果
     */
    Boolean delete(String id);

    /**
     * 修改指定用户信息
     *
     * @param id    需要进行更新处理得管理员用户ID
     * @param admin 具体更改信息对象
     * @return 更改结果
     */
    Boolean update(String id, Admin admin);

    /**
     * 根据用户ID获取该用户详情信息
     *
     * @param id 用户ID
     * @return 用户详情信息
     */
    Admin getItem(String id);

    /**
     * 登录功能
     *
     * @param username 用户名
     * @param password 密码
     * @return 调用认证中心返回结果
     */
    Result<Oauth2Token> login(String username, String password);

    /**
     * 修改用户角色关系
     */
    int updateRole(String adminId, List<String> roleIds);

    /**
     * 修改密码
     */
    int updatePassword(AdminPasswordUpdateParamDto updatePasswordParam);

    /**
     * 根据用户名或昵称分页查询用户
     *
     * @param pageNum  当前页数
     * @param pageSize 每页大小
     * @param keyword  查询关键字(用户名或昵称)
     * @return 分页结果
     */
    List<AdminDto> pageBy(Integer pageNum, Integer pageSize, String keyword);

    /**
     * 获取用户对于角色
     */
    List<Role> getRoleList(String adminId);

    /**
     * 获取指定用户的可访问资源
     */
    List<Resource> getResourceList(String adminId);

    /**
     * 获取用户信息
     */
    CurrUser loadUserByUsername(String username);

    /**
     * 根据用户名获取后台管理员
     */
    Admin getAdminByUsername(String username);

    /**
     * 获取当前登录后台用户
     */
    Admin getCurrentAdmin();
}
